SNA Week 2

Artem Aganov

Необходимые библиотеки

Разработано на основе материалов Bojanowski and Jasny (2025), URL: statnet.org

# install.packages("igraph")
library(igraph)
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:dplyr':
## 
##     as_data_frame, groups, union
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
# install.packages("intergraph")
library(intergraph) # для конвертации между форматами

Узнать больше о пакете igraph можно на сайте разработчиков. Обзор основных функций приводится в виньетке.

Базовый функционал igraph

Создание простых графов

make_graph(c(1, 2, 2, 3, 3, 4), directed = FALSE) %>% plot()

make_graph(~ A - B, B - C:D:E) %>% plot()

g = make_graph(~ A --+ B, B +-- C, A --+ D:E, B --+ A)
g
## IGRAPH 4fc6eb6 DN-- 5 5 -- 
## + attr: name (v/c)
## + edges from 4fc6eb6 (vertex names):
## [1] A->B A->D A->E B->A C->B
plot(g) # граф с прошлой пары

Загрузка данных и конвертация в граф

load("introToSNAinR.Rdata")
summary(contig_1993)
## Network attributes:
##   vertices = 186
##   directed = FALSE
##   hyper = FALSE
##   loops = FALSE
##   multiple = FALSE
##  total edges = 534 
##    missing edges = 0 
##    non-missing edges = 534 
##  density = 0.03103749 
## 
## Vertex attributes:
## 
##  State.Abb:
##    character valued attribute
##    attribute summary:
##    the 10 most common values are:
## AAB AFG ALB ALG AND ANG ARG ARM AUL AUS 
##   1   1   1   1   1   1   1   1   1   1 
## 
##  State.Num:
##    integer valued attribute
##    186 values
##   vertex.names:
##    character valued attribute
##    186 valid vertex names
## 
## Edge attributes:
## 
##  ContType:
##    numeric valued attribute
##    attribute summary:
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   1.000   2.457   4.000   5.000 
## 
## Network edgelist matrix:
##        [,1] [,2]
##   [1,]    2    1
##   [2,]    3    1
##   [3,]    4    1
##   [4,]   16    1
##   [5,]   68    1
##   [6,]    4    3
##   [7,]    5    3
##   [8,]    6    3
##   [9,]    7    3
##  [10,]    5    4
##  [11,]    6    4
##  [12,]    7    4
##  [13,]   16    4
##  [14,]   17    4
##  [15,]   19    4
##  [16,]    6    5
##  [17,]    7    5
##  [18,]   24    5
##  [19,]    7    6
##  [20,]   15    6
##  [21,]   24    6
##  [22,]   25    6
##  [23,]   19    7
##  [24,]   21    7
##  [25,]   24    7
##  [26,]    9    8
##  [27,]   11    8
##  [28,]   12    8
##  [29,]   13    8
##  [30,]   25    8
##  [31,]   26    8
##  [32,]   27    8
##  [33,]   10    9
##  [34,]   11    9
##  [35,]   12    9
##  [36,]   13    9
##  [37,]   14    9
##  [38,]   25    9
##  [39,]   26    9
##  [40,]   11   10
##  [41,]   12   10
##  [42,]   13   10
##  [43,]   15   10
##  [44,]   25   10
##  [45,]   13   11
##  [46,]   14   11
##  [47,]   15   11
##  [48,]   25   11
##  [49,]   26   11
##  [50,]   13   12
##  [51,]   14   12
##  [52,]   15   12
##  [53,]   25   12
##  [54,]   26   12
##  [55,]   14   13
##  [56,]   15   13
##  [57,]   25   13
##  [58,]   26   13
##  [59,]   15   14
##  [60,]   25   14
##  [61,]   25   15
##  [62,]   17   16
##  [63,]   18   16
##  [64,]   19   16
##  [65,]   18   17
##  [66,]   19   17
##  [67,]   19   18
##  [68,]   20   18
##  [69,]   21   18
##  [70,]   22   18
##  [71,]   20   19
##  [72,]   21   19
##  [73,]   21   20
##  [74,]   22   20
##  [75,]   22   21
##  [76,]   23   21
##  [77,]   24   21
##  [78,]   23   22
##  [79,]   24   22
##  [80,]   24   23
##  [81,]   25   24
##  [82,]   28   24
##  [83,]   29   24
##  [84,]   30   24
##  [85,]   26   25
##  [86,]   30   25
##  [87,]   27   26
##  [88,]   30   26
##  [89,]   30   27
##  [90,]   29   28
##  [91,]   30   29
##  [92,]   31   29
##  [93,]   33   29
##  [94,]   31   30
##  [95,]   32   30
##  [96,]   34   30
##  [97,]   35   30
##  [98,]   32   31
##  [99,]   33   31
## [100,]   34   31
## [101,]   34   32
## [102,]   34   33
## [103,]   35   34
## [104,]   37   36
## [105,]   38   36
## [106,]   39   36
## [107,]   41   36
## [108,]   48   36
## [109,]   79   36
## [110,]   80   36
## [111,]   41   37
## [112,]   39   38
## [113,]   41   38
## [114,]   48   38
## [115,]   79   38
## [116,]   80   38
## [117,]   40   39
## [118,]   41   39
## [119,]   48   39
## [120,]   80   39
## [121,]   41   40
## [122,]   48   40
## [123,]   42   41
## [124,]   44   41
## [125,]   45   41
## [126,]   46   41
## [127,]   48   41
## [128,]   54   41
## [129,]   80   41
## [130,]  130   41
## [131,]  131   41
## [132,]   45   42
## [133,]   54   42
## [134,]   44   43
## [135,]   50   43
## [136,]   48   44
## [137,]   50   44
## [138,]   54   44
## [139,]   46   45
## [140,]   47   45
## [141,]   54   45
## [142,]  129   45
## [143,]  130   45
## [144,]  131   45
## [145,]  129   47
## [146,]   49   48
## [147,]   50   48
## [148,]   52   48
## [149,]   68   48
## [150,]   69   48
## [151,]   70   48
## [152,]   71   48
## [153,]   78   48
## [154,]   79   48
## [155,]   80   48
## [156,]   52   49
## [157,]   53   49
## [158,]   68   49
## [159,]   69   49
## [160,]   70   49
## [161,]   71   49
## [162,]   72   49
## [163,]   73   49
## [164,]   77   49
## [165,]   78   49
## [166,]   80   49
## [167,]   51   50
## [168,]   52   50
## [169,]   53   50
## [170,]   54   50
## [171,]   62   50
## [172,]   53   51
## [173,]   59   51
## [174,]   60   51
## [175,]   62   51
## [176,]   67   51
## [177,]   72   51
## [178,]   53   52
## [179,]   72   53
## [180,]   55   54
## [181,]   56   54
## [182,]   57   54
## [183,]   59   54
## [184,]   60   54
## [185,]   62   54
## [186,]   63   54
## [187,]  130   54
## [188,]  131   54
## [189,]  132   54
## [190,]   57   56
## [191,]   63   56
## [192,]  131   56
## [193,]  132   56
## [194,]   58   57
## [195,]   59   57
## [196,]   60   57
## [197,]   63   57
## [198,]   60   58
## [199,]   63   58
## [200,]   65   58
## [201,]   60   59
## [202,]   61   59
## [203,]   62   59
## [204,]   63   59
## [205,]   61   60
## [206,]   65   60
## [207,]   67   60
## [208,]   64   63
## [209,]   65   63
## [210,]  132   63
## [211,]  135   63
## [212,]  137   63
## [213,]  135   64
## [214,]  137   64
## [215,]  138   64
## [216,]  139   64
## [217,]  141   64
## [218,]   67   65
## [219,]   72   65
## [220,]  135   65
## [221,]   67   66
## [222,]   72   66
## [223,]   72   67
## [224,]  135   67
## [225,]   69   68
## [226,]   70   68
## [227,]   71   68
## [228,]   72   68
## [229,]   73   68
## [230,]   75   68
## [231,]   76   68
## [232,]   77   68
## [233,]   78   68
## [234,]   79   68
## [235,]   80   68
## [236,]  135   68
## [237,]  150   68
## [238,]  154   68
## [239,]  155   68
## [240,]  156   68
## [241,]  158   68
## [242,]  159   68
## [243,]  160   68
## [244,]   70   69
## [245,]   77   69
## [246,]   78   69
## [247,]   80   69
## [248,]   71   70
## [249,]   73   70
## [250,]   77   70
## [251,]   78   70
## [252,]   80   70
## [253,]   73   71
## [254,]   77   71
## [255,]   78   71
## [256,]   80   71
## [257,]   73   72
## [258,]   75   72
## [259,]  135   72
## [260,]   75   74
## [261,]   76   74
## [262,]  134   74
## [263,]  135   74
## [264,]   76   75
## [265,]  135   75
## [266,]  134   76
## [267,]  135   76
## [268,]  150   76
## [269,]  154   76
## [270,]   78   77
## [271,]   79   77
## [272,]   79   78
## [273,]   80   78
## [274,]   80   79
## [275,]   88   82
## [276,]   85   83
## [277,]   99   83
## [278,]  100   83
## [279,]  101   83
## [280,]   88   84
## [281,]   93   84
## [282,]   99   85
## [283,]  100   85
## [284,]  101   85
## [285,]   88   86
## [286,]   88   87
## [287,]   90   87
## [288,]   91   87
## [289,]   92   87
## [290,]   93   87
## [291,]   94   87
## [292,]  130   87
## [293,]   90   88
## [294,]   93   88
## [295,]   91   89
## [296,]   94   89
## [297,]   97   89
## [298,]   98   89
## [299,]  100   89
## [300,]  129   90
## [301,]  130   90
## [302,]   94   91
## [303,]   99   91
## [304,]  100   91
## [305,]  103   91
## [306,]  130   91
## [307,]  132   91
## [308,]   93   92
## [309,]   94   92
## [310,]   95   92
## [311,]   97   92
## [312,]   95   93
## [313,]   96   93
## [314,]   97   94
## [315,]   98   94
## [316,]   96   95
## [317,]   98   97
## [318,]  100   97
## [319,]  100   98
## [320,]  100   99
## [321,]  101   99
## [322,]  102   99
## [323,]  103   99
## [324,]  104   99
## [325,]  101  100
## [326,]  103  100
## [327,]  104  101
## [328,]  115  101
## [329,]  103  102
## [330,]  104  102
## [331,]  105  102
## [332,]  133  102
## [333,]  132  103
## [334,]  133  103
## [335,]  105  104
## [336,]  115  104
## [337,]  106  105
## [338,]  108  105
## [339,]  109  105
## [340,]  110  105
## [341,]  115  105
## [342,]  117  105
## [343,]  133  105
## [344,]  107  106
## [345,]  108  106
## [346,]  110  106
## [347,]  133  106
## [348,]  108  107
## [349,]  111  107
## [350,]  113  107
## [351,]  133  107
## [352,]  109  108
## [353,]  110  108
## [354,]  111  108
## [355,]  116  108
## [356,]  117  108
## [357,]  119  108
## [358,]  126  108
## [359,]  128  108
## [360,]  110  109
## [361,]  112  111
## [362,]  113  111
## [363,]  143  111
## [364,]  148  111
## [365,]  113  112
## [366,]  114  112
## [367,]  142  112
## [368,]  143  112
## [369,]  114  113
## [370,]  133  113
## [371,]  142  113
## [372,]  143  113
## [373,]  133  114
## [374,]  142  114
## [375,]  143  114
## [376,]  117  115
## [377,]  121  115
## [378,]  117  116
## [379,]  118  116
## [380,]  119  116
## [381,]  120  116
## [382,]  124  116
## [383,]  125  116
## [384,]  126  116
## [385,]  128  116
## [386,]  118  117
## [387,]  119  117
## [388,]  121  117
## [389,]  123  117
## [390,]  120  118
## [391,]  123  118
## [392,]  121  120
## [393,]  122  120
## [394,]  123  120
## [395,]  124  120
## [396,]  123  121
## [397,]  126  125
## [398,]  128  125
## [399,]  128  126
## [400,]  128  127
## [401,]  130  129
## [402,]  131  130
## [403,]  132  130
## [404,]  132  131
## [405,]  133  132
## [406,]  135  132
## [407,]  137  132
## [408,]  137  133
## [409,]  142  133
## [410,]  143  133
## [411,]  135  134
## [412,]  136  134
## [413,]  142  134
## [414,]  144  134
## [415,]  145  134
## [416,]  146  134
## [417,]  147  134
## [418,]  148  134
## [419,]  149  134
## [420,]  150  134
## [421,]  154  134
## [422,]  163  134
## [423,]  136  135
## [424,]  137  135
## [425,]  138  135
## [426,]  139  135
## [427,]  141  135
## [428,]  138  136
## [429,]  140  136
## [430,]  142  136
## [431,]  144  136
## [432,]  145  136
## [433,]  146  136
## [434,]  138  137
## [435,]  139  137
## [436,]  140  137
## [437,]  141  137
## [438,]  142  137
## [439,]  139  138
## [440,]  140  138
## [441,]  141  138
## [442,]  141  139
## [443,]  141  140
## [444,]  142  140
## [445,]  142  141
## [446,]  143  142
## [447,]  144  142
## [448,]  145  142
## [449,]  146  142
## [450,]  147  142
## [451,]  148  142
## [452,]  148  143
## [453,]  145  144
## [454,]  146  144
## [455,]  146  145
## [456,]  147  145
## [457,]  148  145
## [458,]  147  146
## [459,]  148  146
## [460,]  148  147
## [461,]  163  148
## [462,]  150  149
## [463,]  151  149
## [464,]  153  149
## [465,]  155  149
## [466,]  163  149
## [467,]  153  150
## [468,]  154  150
## [469,]  152  151
## [470,]  153  151
## [471,]  155  151
## [472,]  153  152
## [473,]  154  152
## [474,]  155  152
## [475,]  154  153
## [476,]  155  154
## [477,]  156  155
## [478,]  157  155
## [479,]  158  155
## [480,]  159  155
## [481,]  160  155
## [482,]  161  155
## [483,]  162  155
## [484,]  163  155
## [485,]  165  155
## [486,]  168  155
## [487,]  171  155
## [488,]  172  155
## [489,]  176  155
## [490,]  160  157
## [491,]  176  157
## [492,]  159  158
## [493,]  160  158
## [494,]  160  159
## [495,]  176  160
## [496,]  162  161
## [497,]  163  161
## [498,]  164  161
## [499,]  165  161
## [500,]  166  161
## [501,]  167  161
## [502,]  168  161
## [503,]  169  161
## [504,]  173  161
## [505,]  177  161
## [506,]  165  164
## [507,]  169  165
## [508,]  171  165
## [509,]  177  165
## [510,]  170  169
## [511,]  171  169
## [512,]  172  169
## [513,]  173  169
## [514,]  177  169
## [515,]  171  170
## [516,]  172  170
## [517,]  173  170
## [518,]  172  171
## [519,]  173  172
## [520,]  177  172
## [521,]  174  173
## [522,]  175  173
## [523,]  176  173
## [524,]  177  173
## [525,]  177  174
## [526,]  176  175
## [527,]  177  176
## [528,]  178  177
## [529,]  179  177
## [530,]  185  177
## [531,]  179  178
## [532,]  182  179
## [533,]  185  179
## [534,]  182  181

Наивный перевод из network в graph: по составным частям

Синтаксис graph_from_{...} позволяет создавать графы из разных форматов представления данных, например: матриц смежности (adjacency_matrix), датафреймов (data_frame) или списков рёбер в формате matrix, как ниже:

guerre = network::as.edgelist(contig_1993) %>% graph_from_edgelist(directed = FALSE)
guerre
## IGRAPH 9a6678d U--- 185 534 -- 
## + edges from 9a6678d:
##  [1]  1-- 2  1-- 3  1-- 4  1--16  1--68  3-- 4  3-- 5  3-- 6  3-- 7  4-- 5
## [11]  4-- 6  4-- 7  4--16  4--17  4--19  5-- 6  5-- 7  5--24  6-- 7  6--15
## [21]  6--24  6--25  7--19  7--21  7--24  8-- 9  8--11  8--12  8--13  8--25
## [31]  8--26  8--27  9--10  9--11  9--12  9--13  9--14  9--25  9--26 10--11
## [41] 10--12 10--13 10--15 10--25 11--13 11--14 11--15 11--25 11--26 12--13
## [51] 12--14 12--15 12--25 12--26 13--14 13--15 13--25 13--26 14--15 14--25
## [61] 15--25 16--17 16--18 16--19 17--18 17--19 18--19 18--20 18--21 18--22
## [71] 19--20 19--21 20--21 20--22 21--22 21--23 21--24 22--23 22--24 23--24
## [81] 24--25 24--28 24--29 24--30 25--26 25--30 26--27 26--30 27--30 28--29
## + ... omitted several edges

Проблема: кажется, мы потеряли один узел (почему?)

Конвертация с помощью intergraph

guerre_full = asIgraph(contig_1993)
guerre_full
## IGRAPH a19d05e U--- 186 534 -- 
## + attr: na (v/l), State.Abb (v/c), State.Num (v/n), vertex.names (v/c),
## | ContType (e/n), na (e/l)
## + edges from a19d05e:
##  [1]  1-- 2  1-- 3  1-- 4  1--16  1--68  3-- 4  3-- 5  3-- 6  3-- 7  4-- 5
## [11]  4-- 6  4-- 7  4--16  4--17  4--19  5-- 6  5-- 7  5--24  6-- 7  6--15
## [21]  6--24  6--25  7--19  7--21  7--24  8-- 9  8--11  8--12  8--13  8--25
## [31]  8--26  8--27  9--10  9--11  9--12  9--13  9--14  9--25  9--26 10--11
## [41] 10--12 10--13 10--15 10--25 11--13 11--14 11--15 11--25 11--26 12--13
## [51] 12--14 12--15 12--25 12--26 13--14 13--15 13--25 13--26 14--15 14--25
## [61] 15--25 16--17 16--18 16--19 17--18 17--19 18--19 18--20 18--21 18--22
## + ... omitted several edges
plot(guerre_full, layout = layout_nicely, 
                  vertex.label = V(guerre_full)$State.Abb, 
                  vertex.size = 3,
                  vertex.label.cex = 0.5,
                  vertex.label.dist = 1)

Продвинутые характеристики сетей

Основные метрики сети в igraph

Описательная статистика

# Узлы
vcount(guerre_full)
## [1] 186
# Рёбра
ecount(guerre_full)
## [1] 534
# Диады можно посчитать вручную. Направленный граф:
vcount(guerre_full) * (vcount(guerre_full) - 1)
## [1] 34410
# Диады для ненаправленного графа (наш случай):
vcount(guerre_full) * (vcount(guerre_full) - 1) / 2
## [1] 17205

Метрики центральности

# Degree / Степень связности
deg = degree(guerre_full, mode = "all")

# Indegree, outdegree (имеет смысл только для направленных графов)
ideg = degree(guerre_full, mode = "in")
odeg = degree(guerre_full, mode = "out")

# Betweenness / Степень посредничества
bet = betweenness(guerre_full, directed = F)

# Closeness
clo = closeness(guerre_full, mode = "all")

# Eigenvector centrality
eig = eigen_centrality(guerre_full, directed = F)$vector

data.frame(deg = deg, ideg = ideg, odeg = odeg, bet = bet, clo = clo, eig = eig) %>% skimr::skim()
Data summary
Name Piped data
Number of rows 186
Number of columns 6
_______________________
Column type frequency:
numeric 6
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
deg 0 1.00 5.74 3.49 0 4 5.00 7.00 22.00 ▆▇▂▁▁
ideg 0 1.00 5.74 3.49 0 4 5.00 7.00 22.00 ▆▇▂▁▁
odeg 0 1.00 5.74 3.49 0 4 5.00 7.00 22.00 ▆▇▂▁▁
bet 0 1.00 378.72 904.81 0 0 26.86 291.87 7944.28 ▇▁▁▁▁
clo 5 0.97 0.00 0.00 0 0 0.00 0.00 0.00 ▅▆▇▆▁
eig 0 1.00 0.10 0.17 0 0 0.02 0.12 1.00 ▇▁▁▁▁
# Почему есть пропущенные значения для степени близости?

# Centralization measures
centr_degree(guerre_full, mode = "in", normalized = TRUE)
## $res
##   [1]  5  1  5  8  5  7  7  7  8  6  8  8  9  6  7  5  4  6  7  4  7  5  3 10 12
##  [26]  8  3  2  5  9  5  3  3  5  2  7  2  6  6  3 14  3  2  5  8  2  2 16 12  8
##  [51]  7  4  5 15  1  5  6  4  7  8  2  4 10  6  6  2  6 22  7  9  8 10  5  4  5
##  [76]  7  7  9  7 12  0  1  4  2  4  1  7  6  5  4  8  5  6  6  3  2  5  4  8  9
## [101]  6  5  6  5  9  5  5 11  3  4  6  5  7  5  5  9  8  4  3  6  4  1  4  2  3
## [126]  4  1  5  4  9  6 10 11 14 16  8 10  7  5  5  7 15  7  5  7  7  5  8  6  6
## [151]  4  4  5  7 18  2  3  4  4  6 11  2  5  2  6  1  1  2  7  4  5  6  8  2  2
## [176]  6 10  2  4  0  1  2  0  0  2  0
## 
## $centralization
## [1] 0.08788143
## 
## $theoretical_max
## [1] 34410
centr_eigen(guerre_full, directed = F, normalized = TRUE)
## $vector
##   [1] 1.165389e-01 1.274446e-02 1.686722e-02 1.957601e-02 5.658355e-03
##   [6] 5.974568e-03 6.490791e-03 7.018465e-04 8.228612e-04 7.345685e-04
##  [11] 8.670060e-04 8.670060e-04 9.524734e-04 7.345685e-04 1.314824e-03
##  [16] 1.647764e-02 4.989506e-03 3.560277e-03 6.011541e-03 1.444095e-03
##  [21] 2.432925e-03 1.200474e-03 7.071547e-04 2.833025e-03 1.892933e-03
##  [26] 7.740745e-04 2.415303e-04 3.597214e-04 4.563691e-04 7.327007e-04
##  [31] 1.655161e-04 1.124247e-04 8.220565e-05 1.298266e-04 9.432420e-05
##  [36] 3.629392e-01 8.576023e-02 3.544852e-01 3.225323e-01 1.750453e-01
##  [41] 4.212768e-01 8.279326e-02 4.365299e-02 1.911604e-01 1.175827e-01
##  [46] 5.892855e-02 1.619899e-02 8.568550e-01 7.496100e-01 2.080150e-01
##  [51] 1.227737e-01 2.183454e-01 1.821322e-01 2.182257e-01 2.386470e-02
##  [56] 7.917775e-02 7.386244e-02 4.911199e-02 8.196923e-02 8.949123e-02
##  [61] 1.875056e-02 6.900305e-02 1.574433e-01 1.133676e-01 1.282971e-01
##  [66] 5.381142e-02 1.253427e-01 1.000000e+00 5.764095e-01 6.739811e-01
##  [71] 6.171600e-01 3.667243e-01 3.726344e-01 1.217456e-01 2.337585e-01
##  [76] 2.640135e-01 5.252244e-01 6.864561e-01 4.991845e-01 7.787257e-01
##  [81] 1.009510e-19 5.877742e-04 3.764733e-03 1.010382e-03 3.764733e-03
##  [86] 5.877742e-04 2.294845e-02 5.374775e-03 7.782116e-03 2.014964e-02
##  [91] 4.133784e-02 4.502223e-03 3.864450e-03 9.232948e-03 9.728116e-04
##  [96] 5.289929e-04 4.150946e-03 3.707128e-03 1.328771e-02 1.273302e-02
## [101] 4.640321e-03 1.563059e-02 3.399885e-02 5.636564e-03 1.473807e-02
## [106] 1.344698e-02 1.838619e-02 1.003883e-02 3.205006e-03 4.530578e-03
## [111] 2.646671e-02 3.367427e-02 4.290661e-02 3.848512e-02 3.245648e-03
## [116] 2.298843e-03 3.765543e-03 7.950921e-04 1.761015e-03 5.490997e-04
## [121] 8.986327e-04 6.004840e-05 6.570626e-04 3.114451e-04 6.012343e-04
## [126] 1.590839e-03 1.758668e-04 1.608176e-03 3.054549e-02 1.253853e-01
## [131] 1.218559e-01 1.526366e-01 7.526938e-02 2.304333e-01 3.850713e-01
## [136] 1.332883e-01 1.579871e-01 1.183166e-01 9.784722e-02 7.435898e-02
## [141] 1.200002e-01 1.503675e-01 4.970117e-02 7.633539e-02 9.197175e-02
## [146] 9.197175e-02 7.130753e-02 8.731210e-02 1.043701e-01 2.086274e-01
## [151] 5.974743e-02 7.258307e-02 7.435315e-02 2.345784e-01 2.950413e-01
## [156] 1.416230e-01 6.125789e-02 1.830695e-01 1.830695e-01 1.959287e-01
## [161] 7.096244e-02 4.002540e-02 8.618707e-02 1.374308e-02 5.470819e-02
## [166] 7.760305e-03 7.760305e-03 4.002540e-02 3.433179e-02 1.833544e-02
## [171] 4.958776e-02 5.102796e-02 3.271694e-02 7.580463e-03 1.114430e-02
## [176] 6.918967e-02 3.660098e-02 4.555993e-03 5.060324e-03 1.009510e-19
## [181] 6.124970e-05 5.600847e-04 1.009510e-19 1.009510e-19 4.555993e-03
## [186] 1.009510e-19
## 
## $value
## [1] 9.144285
## 
## $options
## $options$bmat
## [1] "I"
## 
## $options$n
## [1] 186
## 
## $options$which
## [1] "LA"
## 
## $options$nev
## [1] 1
## 
## $options$tol
## [1] 0
## 
## $options$ncv
## [1] 0
## 
## $options$ldv
## [1] 0
## 
## $options$ishift
## [1] 1
## 
## $options$maxiter
## [1] 3000
## 
## $options$nb
## [1] 1
## 
## $options$mode
## [1] 1
## 
## $options$start
## [1] 1
## 
## $options$sigma
## [1] 0
## 
## $options$sigmai
## [1] 0
## 
## $options$info
## [1] 0
## 
## $options$iter
## [1] 3
## 
## $options$nconv
## [1] 1
## 
## $options$numop
## [1] 40
## 
## $options$numopb
## [1] 0
## 
## $options$numreo
## [1] 30
## 
## 
## $centralization
## [1] 0.9122258
## 
## $theoretical_max
## [1] 184

Плотность, диаметр, компоненты связности в igraph

Плотность / density

edge_density(guerre_full)
## [1] 0.03103749

Диаметр / diameter

diameter(guerre_full, directed = FALSE, unconnected = TRUE) 
## [1] 14

Компонента связности / component connectivity

comp = components(guerre_full, mode = "strong")

# Количество компонент
comp$no
## [1] 6
# Размеры компонент
comp$csize
## [1] 181   1   1   1   1   1
# Членство узлов в компонентах
comp$membership
##   [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##  [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##  [75] 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [112] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [149] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1 1 4 5 1
## [186] 6
split(V(guerre_full)$State.Abb, comp$membership)
## $`1`
##   [1] "USA" "CAN" "BHM" "CUB" "HAI" "DOM" "JAM" "TRI" "BAR" "DMA" "GRN" "SLU"
##  [13] "SVG" "AAB" "SKN" "MEX" "BLZ" "GUA" "HON" "SAL" "NIC" "COS" "PAN" "COL"
##  [25] "VEN" "GUY" "SUR" "ECU" "PER" "BRA" "BOL" "PAR" "CHL" "ARG" "URU" "UKG"
##  [37] "IRE" "NTH" "BEL" "LUX" "FRN" "MNC" "LIE" "SWZ" "SPN" "AND" "POR" "GMY"
##  [49] "POL" "AUS" "HUN" "CZR" "SLO" "ITA" "SNM" "MLT" "ALB" "MAC" "CRO" "YUG"
##  [61] "BOS" "SLV" "GRC" "CYP" "BUL" "MLD" "ROM" "RUS" "EST" "LAT" "LIT" "UKR"
##  [73] "BLR" "ARM" "GRG" "AZE" "FIN" "SWD" "NOR" "DEN" "CAP" "STP" "GNB" "EQG"
##  [85] "GAM" "MLI" "SEN" "BEN" "MAA" "NIR" "CDI" "GUI" "BFO" "LBR" "SIE" "GHA"
##  [97] "TOG" "CAO" "NIG" "GAB" "CEN" "CHA" "CON" "DRC" "UGA" "KEN" "TAZ" "BUI"
## [109] "RWA" "SOM" "DJI" "ETH" "ERI" "ANG" "MZM" "ZAM" "ZIM" "MAW" "SAF" "NAM"
## [121] "LES" "BOT" "SWA" "MAG" "COM" "MAS" "SEY" "MOR" "ALG" "TUN" "LIB" "SUD"
## [133] "IRN" "TUR" "IRQ" "EGY" "SYR" "LEB" "JOR" "ISR" "SAU" "YEM" "KUW" "BAH"
## [145] "QAT" "UAE" "OMA" "AFG" "TKM" "TAJ" "KYR" "UZB" "KZK" "CHN" "MON" "TAW"
## [157] "PRK" "ROK" "JPN" "IND" "BHU" "PAK" "BNG" "MYA" "SRI" "MAD" "NEP" "THI"
## [169] "CAM" "LAO" "DRV" "MAL" "SIN" "BRU" "PHI" "INS" "AUL" "PNG" "VAN" "SOL"
## [181] "FSM"
## 
## $`2`
## [1] "ICE"
## 
## $`3`
## [1] "NEW"
## 
## $`4`
## [1] "FIJ"
## 
## $`5`
## [1] "MSI"
## 
## $`6`
## [1] "WSM"
plot(guerre_full, vertex.color = comp$membership)

Продвинутые метрики в network

igraph и network / sna конфликтуют между собой, поэтому сначала необходимо отключить один из пакетов

detach("package:igraph", unload = TRUE)
library(network)
## 
## 'network' 1.19.0 (2024-12-08), part of the Statnet Project
## * 'news(package="network")' for changes since last version
## * 'citation("network")' for citation information
## * 'https://statnet.org' for help, support, and other information
library(sna)
## Loading required package: statnet.common
## 
## Attaching package: 'statnet.common'
## The following objects are masked from 'package:base':
## 
##     attr, order, replace
## sna: Tools for Social Network Analysis
## Version 2.8 created on 2024-09-07.
## copyright (c) 2005, Carter T. Butts, University of California-Irvine
##  For citation information, type citation("sna").
##  Type help(package="sna") to get started.

Загрузим датасет с прошлой пары — про связи детей в классе

edgeNet = read.csv("classroom-edges.csv", header = T, stringsAsFactors = F) %>% network(directed = T)

Плотность / density

gden(edgeNet)
## [1] 0.1466667

Диаметр / diameter

geodist(edgeNet)$gdist %>% max(., na.rm = TRUE)
## [1] Inf

Очень грустно — диаметр оказался бесконечным (существуют бесконечные расстояния). Скорее всего, в графе несколько сильно связных подграфов вместо одного. Простое решение — посчитать диаметр для ненаправленного графа.

a = network(edgeNet[,], directed = F)
geodist(a)$gdist %>% max(., na.rm = TRUE)
## [1] 4

Компонента связности / component connectivity

sna::components(edgeNet, connected = "strong")
## [1] 8
# Несколько компонент, посчитаем диаметр для крупнейшей

component.dist(edgeNet, connected = "strong")
## $membership
##  [1] 1 1 1 2 2 1 2 3 4 5 6 1 1 1 1 1 1 1 1 7 7 7 1 8 1
## 
## $csize
## [1] 14  3  1  1  1  1  3  1
## 
## $cdist
##  [1] 5 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
largest = component.largest(edgeNet, result = "graph")
largest
##      1003 1006 1009 1018 1039 1042 1045 1048 1051 1054 1057 1060 1072 1078
## 1003    0    0    0    1    0    0    0    0    1    0    0    0    1    0
## 1006    0    0    1    0    0    1    0    0    0    0    1    0    0    1
## 1009    0    1    0    0    0    0    0    0    0    0    1    0    0    1
## 1018    0    0    0    0    0    1    0    1    1    0    0    1    1    0
## 1039    0    0    0    1    0    1    0    0    0    0    0    0    0    0
## 1042    0    1    0    1    1    0    0    0    1    0    0    0    0    0
## 1045    0    0    0    1    0    1    0    0    0    0    0    0    0    0
## 1048    0    0    0    1    0    1    1    0    1    1    0    0    0    0
## 1051    0    0    0    1    0    1    1    1    0    1    0    0    0    0
## 1054    0    0    0    1    1    0    0    1    1    0    0    0    1    0
## 1057    0    0    1    0    0    0    0    0    0    0    0    0    0    1
## 1060    1    0    0    1    0    1    0    0    1    0    0    0    0    0
## 1072    1    0    0    1    0    0    0    0    1    0    0    0    0    0
## 1078    0    1    1    0    0    0    0    0    0    0    1    0    0    0
geodist(network(largest))$gdist %>% max(., na.rm = TRUE)
## [1] 6

Визуализации больших сетей

Визуализации на базе network

gplot(contig_1993, gmode = "graph",
      label = colnames(contig_1993[,]),
      label.cex = 0.5, label.col = "blue")

#quartz() или windows()
#coords = gplot(contig_1993, interactive = TRUE)
#gplot(contig_1993, coord = coords)
gplot(contig_1993, gmode = "graph",
      label = ifelse(evcent(contig_1993) > 0.1, colnames(contig_1993[,]), ""),
      label.cex = 0.7, label.col = "blue",
      displayisolates = F, vertex.cex = 10 * evcent(contig_1993))

Визуализация igraph

detach("package:sna", unload = TRUE)
detach("package:network", unload = TRUE)
library(igraph)
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:dplyr':
## 
##     as_data_frame, groups, union
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
plot(
  guerre_full,
  vertex.label = ifelse(betweenness(guerre_full) > 1000, V(guerre_full)$State.Abb, NA),
  vertex.size = betweenness(guerre_full) / 500,
  vertex.label.cex = 0.7,
  vertex.label.color = "blue",
  main = "Graph with Betweenness Centrality Labels"
)

Создадим интерактивный график. Документацию по пакету можно найти здесь: https://datastorm-open.github.io/visNetwork/

#install.packages("visNetwork")
library(visNetwork)

visIgraph(guerre_full) %>%
  visOptions(highlightNearest = T, nodesIdSelection = T) %>%
  visLayout(randomSeed = 123)
# Custom
nodes = data.frame(
  id = 1:vcount(guerre_full),
  label = V(guerre_full)$State.Abb,          
  title = paste("Node", V(guerre_full)$State.Abb),  
  size = 25,                            
  color = "orange",                  
  font.size = 14,                       
  font.color = "black"                 
)

edges = data.frame(
  from = as.vector(get.edgelist(guerre_full)[,1]),
  to = as.vector(get.edgelist(guerre_full)[,2]),
  color = "gray"
)

visNetwork(nodes, edges) %>%
  visOptions(
    highlightNearest = list(enabled = TRUE, hover = TRUE),
    nodesIdSelection = TRUE,
  ) %>% visPhysics(stabilization = FALSE) %>%
  visLayout(randomSeed = 123)

Групповое задание — заявка на проект

Проектные заявки сдавать в форму по этой ссылке

Структура заявки на проект:

  • ФИО двух-трёх участников (один человек — одна группа, по одиночке нельзя). Если вы не можете найти себе пару, напишите мне на почту как можно скорее.

  • Исследовательский вопрос — не может быть задан в форме да/нет; ваша задача узнать, как/почему нечто происходит и/или провести разведочный анализ.

  • Структура данных и ссылка на них. Из приложенных вами сведений должно быть понятно, откуда вы взяли ваши данные, как они соотносятся с вашим исследовательским вопросом, а также как они внутренне организованы.

    Просто приложить ссылку на датасет без кодбука и описания не имеет смысла — лучше ссылка на сайт, где будут выложены все эти вещи. Если существует только файл с данными, напишите в нескольких предложениях, какие переменные вам нужны и откуда взялись данные: кто их собирал, когда, о чём и зачем.